import os
import platform
Import('env')

android_home = env.get('ANDROID_HOME')

ANDROID_TARGET_ARCH = env.get('TARGET_ARCH')
if env.get('RELEASE'):
    ANDROID_RELEASE = "release"
else:
    ANDROID_RELEASE = "debug"

os.environ['ANDROID_HOME'] = env.get('ANDROID_HOME')
os.environ['ANDROID_NDK_HOME'] = env.get('ANDROID_NDK')

if not os.path.exists(android_home +
                      '/platforms/android-21') or not os.path.exists(
                          android_home + '/build-tools/20.0.0'):
    print('''
***************************************** Info ********************************
*   Either 'Android API 21' is not installed or 'Android SDK Build Tools      *
*   20.0.0' is not installed. The Android SDK Manager will now open. Please   *
*   be sure to deselect all options, then select the following 2 packages:    *
*       1. Under "Tools" select "Android SDK Build-tools" Revision 20.        *
*       2. Under "Android 5.0.1 (API 21)" select "SDK Platform"               *
*       3. Continue by selecting "Install 2 Packages"                         *
*                                                                             *
*   NOTE: If you have an http proxy, please press ctrl+c now and edit/create  *
*         the following file in your $HOME directory as follows:              *
*                                                                             *
* Edit/Create file: "$HOME/.android/androidtool.cfg"                          *
*                                                                             *
*    http.proxyPort=<YOUR_PORT_NUMBER>                                        *
*    sdkman.monitor.density=108                                               *
*    http.proxyHost=<YOUR_HTTP_PROXY_ADDRESS>                                 *
*    sdkman.show.update.only=true                                             *
*    sdkman.ask.adb.restart=false                                             *
*    sdkman.force.http=true                                                   *
*    sdkman.show.updateonly=true                                              *
*                                                                             *
*******************************************************************************

...Opening Android SDK Manager now. Once you are finished, the build will continue.
''')
    os.system(android_home + '/tools/android')


def ensure_libs(target, source, env):
    return target, [
        source,
        env.get('BUILD_DIR') + 'librcs_server.so',
        env.get('BUILD_DIR') + 'librcs_client.so'
    ]


jdk_env = Environment(ENV=os.environ)
jdk_env['BUILDERS']['Gradle'] = Builder(
    action=env.get('ANDROID_GRADLE') +
    ' build -bservice/resource-encapsulation/android/build.gradle -PTARGET_ARCH=%s -PRELEASE=%s --stacktrace'
    % (ANDROID_TARGET_ARCH, ANDROID_RELEASE),
    emitter=ensure_libs)
jdk_env['BUILD_DIR'] = env.get('BUILD_DIR')
cmdBuildRE = jdk_env.Gradle(
    target="service/objs",
    source=
    "service/src/main/java/org/iotivity/service/RcsResourceAttributes.java")
jdk_env.Clean(cmdBuildRE, '#/service/resource-encapsulation/android/build')
jdk_env.Clean(cmdBuildRE,
              '#/service/resource-encapsulation/android/service/build')
env.AppendUnique(resourceencapsulationAAR=cmdBuildRE)

Depends(cmdBuildRE, env.get('baseAAR'))

# Build RE Android Samples
re_sample_server_env = Environment(ENV=os.environ)
re_sample_server_env['BUILDERS']['Gradle'] = Builder(
    action=env.get('ANDROID_GRADLE') +
    ' build -bservice/resource-encapsulation/examples/android/RESampleServerApp/build.gradle -PTARGET_ARCH=%s -PRELEASE=%s --stacktrace'
    % (ANDROID_TARGET_ARCH, ANDROID_RELEASE),
    emitter=ensure_libs)
re_sample_server_env['BUILD_DIR'] = env.get('BUILD_DIR')
cmdBuildREServerApp = re_sample_server_env.Gradle(
    target="../examples/android/RESampleServerApp/app/apk",
    source=[
        "../examples/android/RESampleServerApp/app/src/main/java/org/iotivity/service/sample/server/MainActivity.java",
        "../examples/android/RESampleServerApp/app/src/main/java/org/iotivity/service/sample/server/CustomServerActivity.java",
        "../examples/android/RESampleServerApp/app/src/main/java/org/iotivity/service/sample/server/ResourceProperties.java",
        "../examples/android/RESampleServerApp/app/src/main/java/org/iotivity/service/sample/server/SimpleServerActivity.java"
    ])
jdk_env.Clean(
    cmdBuildREServerApp,
    '#/service/resource-encapsulation/examples/android/RESampleServerApp/build'
)
jdk_env.Clean(
    cmdBuildREServerApp,
    '#/service/resource-encapsulation/examples/android/RESampleServerApp/app/build'
)
Depends(cmdBuildREServerApp, cmdBuildRE)

re_sample_client_env = Environment(ENV=os.environ)
re_sample_client_env['BUILDERS']['Gradle'] = Builder(
    action=env.get('ANDROID_GRADLE') +
    ' build -bservice/resource-encapsulation/examples/android/RESampleClientApp/build.gradle -PTARGET_ARCH=%s -PRELEASE=%s --stacktrace'
    % (ANDROID_TARGET_ARCH, ANDROID_RELEASE),
    emitter=ensure_libs)
re_sample_client_env['BUILD_DIR'] = env.get('BUILD_DIR')
cmdBuildREClientApp = re_sample_client_env.Gradle(
    target="../examples/android/RESampleClientApp/app/apk",
    source=[
        "../examples/android/RESampleClientApp/app/src/main/java/org/iotivity/service/sample/client/MainActivity.java",
        "../examples/android/RESampleClientApp/app/src/main/java/org/iotivity/service/sample/client/ResourceClientActivity.java"
    ])
jdk_env.Clean(
    cmdBuildREClientApp,
    '#/service/resource-encapsulation/examples/android/RESampleClientApp/build'
)
jdk_env.Clean(
    cmdBuildREClientApp,
    '#/service/resource-encapsulation/examples/android/RESampleClientApp/app/build'
)
Depends(cmdBuildREClientApp, cmdBuildRE)


